From 3402cbc5bc42e1271175b1723ba2f4a2ffd2c72f Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 16 Mar 2006 12:06:48 -0700 Subject: [PATCH] [IA64] use of max_addr= & command line Use 'max_addr' option to limit the amount of physical memory. The default is 4G (the same as the previous hard limit). The hard-coded limit is removed. dom0_command_line now contains the cmdline for dom0 linux. saved_command_line now contains the cmdline for Xen (it is used in Xen). Signed-off-by: Tristan Gingold --- xen/arch/ia64/linux-xen/efi.c | 7 +++++-- xen/arch/ia64/linux-xen/setup.c | 7 +++---- xen/arch/ia64/xen/domain.c | 21 +++++++++++++-------- xen/arch/ia64/xen/xensetup.c | 7 +++++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/xen/arch/ia64/linux-xen/efi.c b/xen/arch/ia64/linux-xen/efi.c index c77afb17ea..2d4423c93b 100644 --- a/xen/arch/ia64/linux-xen/efi.c +++ b/xen/arch/ia64/linux-xen/efi.c @@ -42,7 +42,12 @@ extern unsigned long long memparse (char *ptr, char **retptr); struct efi efi; EXPORT_SYMBOL(efi); static efi_runtime_services_t *runtime; +#ifdef XEN +// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP +static unsigned long mem_limit = ~0UL, max_addr = 0x100000000; +#else static unsigned long mem_limit = ~0UL, max_addr = ~0UL; +#endif #define efi_call_virt(f, args...) (*(f))(args) @@ -329,8 +334,6 @@ efi_memmap_walk (efi_freemem_callback_t callback, void *arg) if (running_on_sim && md->type != EFI_CONVENTIONAL_MEMORY) continue; } -// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP - if (md->phys_addr >= 0x100000000) continue; #endif /* * granule_addr is the base of md's first granule. diff --git a/xen/arch/ia64/linux-xen/setup.c b/xen/arch/ia64/linux-xen/setup.c index ac75b86142..92b0b8cb11 100644 --- a/xen/arch/ia64/linux-xen/setup.c +++ b/xen/arch/ia64/linux-xen/setup.c @@ -384,6 +384,9 @@ setup_arch (char **cmdline_p) *cmdline_p = __va(ia64_boot_param->command_line); #ifndef XEN strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE); +#else + early_cmdline_parse(cmdline_p); + cmdline_parse(*cmdline_p); #endif efi_init(); @@ -414,10 +417,6 @@ setup_arch (char **cmdline_p) } #endif -#ifdef XEN - early_cmdline_parse(cmdline_p); - cmdline_parse(*cmdline_p); -#endif if (early_console_setup(*cmdline_p) == 0) mark_bsp_online(); diff --git a/xen/arch/ia64/xen/domain.c b/xen/arch/ia64/xen/domain.c index 2b0ca6024f..2c85d9e715 100644 --- a/xen/arch/ia64/xen/domain.c +++ b/xen/arch/ia64/xen/domain.c @@ -26,6 +26,7 @@ #include #include #include +#include //#include #include #include @@ -36,7 +37,6 @@ #include //#include #include -#include /* for MAX_DMA_ADDRESS */ #include /* for IA64_THREAD_INFO_SIZE */ @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -415,7 +416,7 @@ void new_thread(struct vcpu *v, { struct domain *d = v->domain; struct pt_regs *regs; - extern char saved_command_line[]; + extern char dom0_command_line[]; #ifdef CONFIG_DOMAIN0_CONTIGUOUS if (d == dom0) start_pc += dom0_start; @@ -439,24 +440,27 @@ void new_thread(struct vcpu *v, if (VMX_DOMAIN(v)) { vmx_init_all_rr(v); if (d == dom0) -// VCPU(v,vgr[12]) = dom_fw_setup(d,saved_command_line,256L); - regs->r28 = dom_fw_setup(d,saved_command_line,256L); + regs->r28 = dom_fw_setup(d,dom0_command_line, + COMMAND_LINE_SIZE); /* Virtual processor context setup */ VCPU(v, vpsr) = IA64_PSR_BN; VCPU(v, dcr) = 0; } else { init_all_rr(v); if (d == dom0) - regs->r28 = dom_fw_setup(d,saved_command_line,256L); + regs->r28 = dom_fw_setup(d,dom0_command_line, + COMMAND_LINE_SIZE); else { regs->ar_rsc |= (2 << 2); /* force PL2/3 */ if (*d->arch.cmdline == '\0') { #define DEFAULT_CMDLINE "nomca nosmp xencons=tty0 console=tty0 root=/dev/hda1" - regs->r28 = dom_fw_setup(d,DEFAULT_CMDLINE,256L); + regs->r28 = dom_fw_setup(d,DEFAULT_CMDLINE, + sizeof (DEFAULT_CMDLINE)); printf("domU command line defaulted to" DEFAULT_CMDLINE "\n"); } - else regs->r28 = dom_fw_setup(d,d->arch.cmdline,256L); + else regs->r28 = dom_fw_setup(d,d->arch.cmdline, + IA64_COMMAND_LINE_SIZE); } VCPU(v, banknum) = 1; VCPU(v, metaphysical_mode) = 1; @@ -645,12 +649,13 @@ unsigned long lookup_domain_mpa(struct domain *d, unsigned long mpaddr) #ifdef CONFIG_DOMAIN0_CONTIGUOUS if (d == dom0) { + pte_t pteval; if (mpaddr < dom0_start || mpaddr >= dom0_start + dom0_size) { //printk("lookup_domain_mpa: bad dom0 mpaddr 0x%lx!\n",mpaddr); //printk("lookup_domain_mpa: start=0x%lx,end=0x%lx!\n",dom0_start,dom0_start+dom0_size); mpafoo(mpaddr); } - pte_t pteval = pfn_pte(mpaddr >> PAGE_SHIFT, + pteval = pfn_pte(mpaddr >> PAGE_SHIFT, __pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX)); pte = &pteval; return *(unsigned long *)pte; diff --git a/xen/arch/ia64/xen/xensetup.c b/xen/arch/ia64/xen/xensetup.c index 2599ef1ec8..89c2a350fc 100644 --- a/xen/arch/ia64/xen/xensetup.c +++ b/xen/arch/ia64/xen/xensetup.c @@ -27,6 +27,7 @@ unsigned long xenheap_phys_end; char saved_command_line[COMMAND_LINE_SIZE]; +char dom0_command_line[COMMAND_LINE_SIZE]; struct vcpu *idle_vcpu[NR_CPUS]; @@ -119,11 +120,12 @@ static char null[4] = { 0 }; void early_cmdline_parse(char **cmdline_p) { char *guest_cmd; - char *split = "--"; + static const char * const split = "--"; if (*cmdline_p == NULL) { *cmdline_p = &null[0]; saved_command_line[0] = '\0'; + dom0_command_line[0] = '\0'; return; } @@ -138,7 +140,8 @@ void early_cmdline_parse(char **cmdline_p) while (*guest_cmd == ' ') guest_cmd++; } - strlcpy(saved_command_line, guest_cmd, COMMAND_LINE_SIZE); + strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE); + strlcpy(dom0_command_line, guest_cmd, COMMAND_LINE_SIZE); return; } -- 2.30.2